home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1978-08-29 | 13.9 KB | 549 lines |
- ' AMOS Number Leap
- '
- ' BY P.J. Hickman
- Close Editor
- 'Define Global Variables
- Dim NUMS(6,4),WEIGHTING(9),NUMBER$(20)
- If Chip Free>250000
- ENOUGH_MEM=True
- Else
- ENOUGH_MEM=False
- End If
- 'Set Up Game
- SET_UP
- 'Main Loop
- Repeat
- TB=Rnd(7)+3
- FROGX=0
- FROGY=1
- MOVES=0
- TITLE_PAGE
- Repeat
- CHECK_MOVE
- CHECK_SINK
- FROG_SINK=Param
- CHECK_FINISH
- CROSSED=Param
- Until CROSSED or FROG_SINK
- Until False
- End
- 'Check Keyboard And Make Frog Move Accordingly
- Procedure CHECK_MOVE
- Shared FROGX,FROGY,MOVES,ENOUGH_MEM
- WALKIES=False
- Timer=0
- Clear Key
- Repeat
- TEMP$=Inkey$ : TEMP=Scancode
- UPPER=Key State(76) or Jup(1)
- LOWER=Key State(77) or Jdown(1)
- LEFT=Key State(79) or Jleft(1)
- RIGHT=Key State(78) or Jright(1)
- If UPPER and FROGY>1
- UPPER_MOVE
- WALKIES=True
- Dec FROGY
- End If
- If LOWER and FROGY<4
- LOWER_MOVE
- WALKIES=True
- Inc FROGY
- End If
- If RIGHT
- RIGHT_MOVE
- WALKIES=True
- Inc FROGX
- End If
- If LEFT and FROGX>0
- LEFT_MOVE
- WALKIES=True
- Dec FROGX
- End If
- If Timer mod 300=0 and Timer>300 and ENOUGH_MEM and Not WALKIES Then Sam Play 1,2,6000
- If Timer mod 250=0 and Timer>100 and ENOUGH_MEM Then Sam Play 2,4,9000
- If TEMP>0 and TEMP<76 Then CHECK_SPEECH
- Inc PASS
- Until WALKIES
- Inc MOVES
- End Proc
- 'Do The Dirty Work Of Calling The Initial Set Up Routines
- Procedure SET_UP
- Default
- Screen Close 0
- CHECK_NARRATOR
- FILE_LOAD
- SET_UP_CHANNELS
- SET_UP_WEIGHTING
- SET_UP_SPEECH
- End Proc
- 'Check to see if the narrator can be loaded
- Procedure CHECK_NARRATOR
- Shared TALK_POSSIBLE
- On Error Goto BAD_ERROR
- ' --- only executes this bit if no error occurs ---
- Set Talk 0,,,
- TALK_POSSIBLE=True
- FINISH:
- Pop Proc
- ' --- if an error occurs while accessing the narrator library ---
- ' --- this bit sets a variable to false so that no speech is ---
- ' --- generated. ---
- BAD_ERROR:
- TALK_POSSIBLE=False
- Resume FINISH
- End Proc
- 'Generate The Numbers Which Make Up The Maze
- Procedure GENERATE_MAZE
- Shared NUMS(),TB
- For X=1 To 6
- For Y=1 To 4
- NUMS(X,Y)=Rnd((9*TB)-1)+1
- Next Y
- Next X
- X=0 : Y=Rnd(2)+1
- While X<>7
- A=Rnd(2)
- If X<7 Then NUMS(X,Y)=TB*(Rnd(8)+1)
- If A=0 and X<7 Then Inc X
- If A=1 and Y<4 Then Inc Y
- If A=2 and Y>1 Then Dec Y
- Wend
- WRITE_NUMBERS
- End Proc
- 'This Procedure Centres The Numbers On The Lily Pads
- Procedure WRITE_NUMBERS
- Shared NUMS(),TB,WEIGHTING()
- ' ~~~~~ Display Table Number ~~~~~
- TEMP=Len(Str$(TB))-1
- TEMP$=Right$(Str$(TB),TEMP)
- TEMP2=0
- For LOP=1 To TEMP
- CHAR=Val(Mid$(TEMP$,LOP,1))
- Add TEMP2,WEIGHTING(CHAR)
- Next LOP
- POSX=40-TEMP2
- For LOP=1 To TEMP
- CHAR=Val(Mid$(TEMP$,LOP,1))
- Paste Bob POSX,0,CHAR+33
- Paste Bob POSX+263,0,CHAR+33
- Add POSX,WEIGHTING(CHAR)+1
- Next LOP
- ' ~~~~~ Display Lily Numbers ~~~~~
- For LOP1=1 To 4
- For LOP2=1 To 6
- TEMP=Len(Str$(NUMS(LOP2,LOP1)))-1
- TEMP$=Right$(Str$(NUMS(LOP2,LOP1)),TEMP)
- TEMP2=0
- For LOP=1 To TEMP
- CHAR=Val(Mid$(TEMP$,LOP,1))
- Add TEMP2,WEIGHTING(CHAR)
- Next LOP
- POSX=(6+(LOP2-1)*45)+(40-TEMP2/2)
- POSY=(46+(LOP1-1)*42)
- For LOP=1 To TEMP
- CHAR=Val(Mid$(TEMP$,LOP,1))
- Paste Bob POSX,POSY,CHAR+33
- Add POSX,WEIGHTING(CHAR)+1
- Next LOP
- Next LOP2
- Next LOP1
- Double Buffer
- End Proc
- 'Stored The Size Of The Number BOBs In An Array
- Procedure SET_UP_WEIGHTING
- Shared WEIGHTING()
- Restore SPACEING
- For LOP=0 To 9
- Read WEIGHTING(LOP)
- Next LOP
- SPACEING:
- Data 20,11,12,12,15,12,14,13,14,13
- End Proc
- 'Check If The Frog Has Hit A Wrong Number, If It Does, Sink The Pad
- Procedure CHECK_SINK
- Shared FROGX,FROGY,NUMS(),TB,FROG_SINK$,ENOUGH_MEM,TALK_POSSIBLE
- TEMP=False
- If FROGX>0 and FROGX<7
- If NUMS(FROGX,FROGY) mod TB<>0
- Bob Off 10
- Bob 1,25+(FROGX-1)*45,37+(FROGY-1)*42,21
- Amal 1,FROG_SINK$
- Amal On 1
- If ENOUGH_MEM
- Sam Play 12,3,6000
- End If
- Wait 150
- Amal Off 1
- Music Off
- TEMP=True
- If TALK_POSSIBLE
- LOSERS_SPEECH
- End If
- Fade 2
- Wait 28
- Screen Close 7
- End If
- End If
- End Proc[TEMP]
- ' Checks To See If The Frog Has Reached The Other Bank
- Procedure CHECK_FINISH
- Shared FROGX
- TEMP=False
- If FROGX=7
- TEMP=True
- WELL_DONE
- End If
- End Proc[TEMP]
- 'If Frog Has Reached Other Bank Make Him Bounce A Bit
- Procedure WELL_DONE
- Shared FROGLEFT$,WATER$,BLEFT$,BRIGHT$,TALK_POSSIBLE
- Rainbow 0,0,50,250
- Amal 8,WATER$
- Amal 10,FROGLEFT$
- Amal On
- Wait 50
- If TALK_POSSIBLE
- WINNERS_SPEECH
- End If
- Bob 10,X Bob(10),Y Bob(10)-10,17
- ' Bounce Frog Left
- For LOP=1 To 5
- Amal 10,BLEFT$
- Amal On 10
- Repeat
- Wait 8
- Until Amreg(0)=0
- Next LOP
- ' Bounce Frog Right
- For LOP=1 To 5
- Amal 10,BRIGHT$
- Amal On 10
- Repeat
- Wait 6
- Until Amreg(0)=0
- Wait 5
- Next LOP
- Amal Off 10
- Bob Off 10
- Rainbow Del 0
- Fade 2
- Wait 28
- Screen Close 7
- End Proc
- 'Move Frog Right
- Procedure RIGHT_MOVE
- Shared FROGRIGHT$,ENOUGH_MEM
- Bob 10,X Bob(10)+4,Y Bob(10)+4,1
- If ENOUGH_MEM Then Sam Play 12,1,7000
- Amal 10,FROGRIGHT$
- Amal On 10
- Wait 50
- Bob 10,X Bob(10)-4,Y Bob(10)-4,13
- End Proc
- 'Move Frog Left
- Procedure LEFT_MOVE
- Shared FROGLEFT$,ENOUGH_MEM
- Bob 10,X Bob(10)+4,Y Bob(10)+4,5
- If ENOUGH_MEM Then Sam Play 12,1,7000
- Amal 10,FROGLEFT$
- Amal On 10
- Wait 50
- Bob 10,X Bob(10)-4,Y Bob(10)-4,13
- End Proc
- 'Move Frog Up
- Procedure UPPER_MOVE
- Shared FROGUP$,ENOUGH_MEM
- If ENOUGH_MEM Then Sam Play 12,1,7000
- Amal 10,FROGUP$
- Amal On 10
- Wait 50
- Bob 10,X Bob(10),Y Bob(10),13
- End Proc
- 'Move Frog Down
- Procedure LOWER_MOVE
- Shared FROGDOWN$,ENOUGH_MEM
- If ENOUGH_MEM Then Sam Play 12,1,7000
- Amal 10,FROGDOWN$
- Amal On 10
- Wait 50
- Bob 10,X Bob(10),Y Bob(10),13
- End Proc
- ' Load BOBs, Pictures And Sound Into The Correct Banks
- Procedure FILE_LOAD
- Shared ENOUGH_MEM
- Dir$="Amos_Data:"
- If ENOUGH_MEM
- Load "Number_Leap/Frog_Screen.ABK",7
- Load "Number_Leap/Frog_Title.ABK",6
- Load "Samples/Frog_Samples.ABK"
- Volume 15,63
- End If
- Load "Sprites/Frog_Sprites.ABK"
- Make Mask
- End Proc
- 'Set Up The AMAL Channels For The BOBs Used Within The Main Game
- Procedure SET_UP_CHANNELS
- Shared FROG_SINK$,FROGUP$,FROGDOWN$,FROGLEFT$,FROGRIGHT$
- Shared TITLE$,FISH$,WATER$,DUCK$,BLEFT$,BRIGHT$
- ' ^^^^^ Sink Channel ^^^^^
- Channel 1 To Bob 1
- ' ^^^^^ Fish Channels ^^^^^
- Channel 2 To Bob 2
- Channel 3 To Bob 3
- Channel 4 To Bob 4
- ' ^^^^^ Title Channel ^^^^^
- Channel 5 To Bob 5
- ' ^^^^^ Duck Channel ^^^^^
- Channel 6 To Bob 6
- ' ^^^^^ BIG Frog ^^^^^
- Channel 7 To Bob 7
- ' ^^^^^ Water Rainbow ^^^^^
- Channel 8 To Rainbow 0
- ' ^^^^^ Frog Channel ^^^^^
- Channel 10 To Bob 10
- '
- ' ^^^^^ AMAL strings ^^^^^
- ' ^^^^^ Frog Sink ^^^^^
- FROG_SINK$="Anim 1,(22,8)(23,8)(24,8)(25,8)(26,8)(27,8)(28,8)"
- FROG_SINK$=FROG_SINK$+"(29,8)(30,8)(31,8)(32,8)"
- ' ^^^^^ Frog Up ^^^^^
- FROGUP$="Anim 1,(9,6)(10,6)(11,6)(12,6)(9,6) Pause "
- FROGUP$=FROGUP$+"Move 0,-42,21"
- ' ^^^^^ Frog Down ^^^^^
- FROGDOWN$="Anim 1,(13,6)(14,6)(15,6)(16,6)(13,6) Pause "
- FROGDOWN$=FROGDOWN$+"Move 0,42,21"
- ' ^^^^^ Frog Right ^^^^^
- FROGRIGHT$="Anim 1,(1,7)(2,7)(3,7)(4,7)(3,7)(1,7) Pause "
- FROGRIGHT$=FROGRIGHT$+"Move 45,0,35"
- ' ^^^^^ Frog Left ^^^^^
- FROGLEFT$="Anim 1,(5,7)(6,7)(7,7)(8,7)(7,7)(5,7) Pause "
- FROGLEFT$=FROGLEFT$+"Move -45,0,35"
- ' ^^^^^ Frog Bounce ^^^^^
- BLEFT$=" Let RA=1"
- BLEFT$=BLEFT$+" Anim 1,(17,4)(18,4)(19,4)(20,4)(21,5)"
- BLEFT$=BLEFT$+" Pause Move -23,-10,14"
- BLEFT$=BLEFT$+" Anim 1,(20,3)(19,3)(18,3)(17,3)"
- BLEFT$=BLEFT$+" Pause Move -22,10,13"
- BLEFT$=BLEFT$+" Let RA=0"
- BRIGHT$=" Let RA=1"
- BRIGHT$=BRIGHT$+" Anim 1,(17,4)(18,4)(19,4)(20,4)(21,5)"
- BRIGHT$=BRIGHT$+" Pause Move 23,-10,14"
- BRIGHT$=BRIGHT$+" Anim 1,(20,3)(19,3)(18,3)(17,3)"
- BRIGHT$=BRIGHT$+" Pause Move 22,10,13"
- BRIGHT$=BRIGHT$+"Let RA=0"
- ' ^^^^^ Title Animation ^^^^^
- TITLE$="Begin: Move 6,4,14 Move 6,-4,14"
- TITLE$=TITLE$+" Move -6,4,14 Move -6,-4,14 Jump Begin"
- ' ^^^^^ Fish Animation ^^^^^
- FISH$="Begin: Let R0=Zandom(3)+4 Anim 0,(48,R0)(49,R0)(50,R0)"
- FISH$=FISH$+"(51,R0)(52,R0)(53,R0)(54,R0)(55,R0)"
- ' ^^^^^ Duck Animation ^^^^^
- DUCK$="Begin: Anim 1,(61,8) PPPP P P Anim 0,(58,8)(59,8)(58,8)(60,8)"
- DUCK$=DUCK$+"P M -160,0,320 Anim 1,(61,8) P P PPPP "
- DUCK$=DUCK$+"Anim 0,(62,8)(63,8)(62,8)(64,8) P M 160,0,320 Jump Begin"
- ' ^^^^^ Rainbow ^^^^^
- WATER$="Begin: For R0=0 To 29 Let X=29-R0 Pause Pause Next R0 Jump Begin"
- End Proc
- 'Start Animation of Title, Frogs And Fish
- Procedure EXECUTE_ANIMATION
- Shared TITLE$,FISH$,DUCK$
- ' ^^^^^ Bouncing Title ^^^^^
- Bob 5,78,2,43
- Amal 5,TITLE$
- ' ^^^^^ Duck Movement ^^^^^
- Bob 6,220,100,59
- Amal 6,DUCK$
- ' ^^^^^ Fish Movement ^^^^^
- FISH_DRAW[1]
- Randomize Timer
- FISH_DRAW[3]
- ' ^^^^^ Set Rainbow Pattern ^^^^^
- Set Rainbow 0,9,30,"","","(1,1,15)(1,1,15)"
- Amal On
- End Proc
- 'Draw The Fish
- Procedure FISH_DRAW[YPOS]
- Shared FISH$
- Randomize Timer
- X=Rnd(4)+1
- Bob YPOS+1,(X*45)+10,(YPOS*42)+22,48
- Randomize Timer
- Amal YPOS+1,FISH$
- End Proc
- 'Display The Tile Page And Wait For A Keypress
- Procedure TITLE_PAGE
- Shared TB,ENOUGH_MEM
- FROGPOS=0
- If Not ENOUGH_MEM
- Load "Number_Leap/Frog_Title.ABK",6
- Unpack 6 To 6
- Erase 6
- Else
- Unpack 6 To 6
- End If
- Hide On
- Double Buffer
- Bob 7,120,28,44
- Anim 7,"(44,6)(45,6)(46,6)(47,15)(46,6)(45,6)(44,6)l"
- Bob 10,12,114,13
- Screen Show 6
- Clear Key
- Anim On 7
- Repeat
- UPPER=Key State(76) or Jup(1)
- LOWER=Key State(77) or Jdown(1)
- LEFT=Key State(79) or Jleft(1)
- RIGHT=Key State(78) or Jright(1)
- TEMP1$=Inkey$ : TEMP2=Fire(1)
- If UPPER and FROGPOS=1
- UPPER_MOVE
- Dec FROGPOS
- Else
- If UPPER and FROGPOS=7
- UPPER_MOVE
- Inc FROGPOS
- End If
- End If
- If LOWER and FROGPOS=0
- LOWER_MOVE
- Inc FROGPOS
- Else
- If LOWER and FROGPOS=8
- LOWER_MOVE
- Dec FROGPOS
- End If
- End If
- If RIGHT and FROGPOS>0 and FROGPOS<7
- RIGHT_MOVE
- Inc FROGPOS
- End If
- If LEFT and FROGPOS>1 and FROGPOS<8
- LEFT_MOVE
- Dec FROGPOS
- End If
- Until TEMP1$=" " or TEMP2
- If FROGPOS<>8
- TB=FROGPOS+2
- End If
- Fade 2
- Wait 20
- Screen Close 6
- SET_UP_SCREEN
- End Proc
- Procedure SET_UP_SCREEN
- Shared ENOUGH_MEM
- If Not ENOUGH_MEM
- Load "Number_Leap/Frog_Screen.ABK",7
- Unpack 7 To 7
- Erase 7
- Else
- Unpack 7 To 7
- End If
- Screen Hide 7
- Hide On
- GENERATE_MAZE
- Bob 10,-8,34,13
- EXECUTE_ANIMATION
- Screen Show 7
- End Proc
- 'Pause For A While
- Procedure W[TIME]
- For DELAY=1 To TIME*100
- Next DELAY
- End Proc
- 'Make Sure The Player Is On A Lily Before Speaking The Sum
- Procedure CHECK_SPEECH
- Shared FROGX,FROGY,FROG_SINK,CROSSED,TALK_POSSIBLE
- If FROGX<>0 and FROG_SINK<>True and CROSSED<>True and TALK_POSSIBLE
- SPEAK_LILY_PAD
- Clear Key
- End If
- End Proc
- 'Tell The Player The Sum Which Makes The Number On The Current Lily
- Procedure SPEAK_LILY_PAD
- Shared FROGX,FROGY,NUMS(),TB
- NUM_SAY[TB]
- TALK$=TALK$+Param$+" Times "
- NUM_SAY[NUMS(FROGX,FROGY)/TB]
- TALK$=TALK$+Param$+"=),,,,,,,"
- NUM_SAY[NUMS(FROGX,FROGY)]
- TALK$=TALK$+Param$
- Amal Freeze
- TALK[TALK$]
- Amal On
- End Proc
- 'Say Any Number Between 0 and 199
- Procedure NUM_SAY[NUM]
- Shared NUMBER$()
- RET$=""
- NUM$=Str$(NUM)
- NUMLEN=Len(NUM$)-1
- NUM$=Right$(NUM$,NUMLEN)
- If NUM>99
- RET$="one hundred and "
- Else
- If NUM<10
- RET$=NUM$
- Else
- If NUM>9 and NUM<20
- RET$=NUMBER$(NUM)
- Else
- RET$=RET$+NUMBER$(Val(Left$(NUM$,1)))
- If NUM mod 10<>0
- RET$=RET$+" "+Right$(NUM$,1)
- End If
- End If
- End If
- End If
- End Proc[RET$]
- 'This Procedure Places Phonetic Numbers Into An Array
- Procedure SET_UP_SPEECH
- Restore SPEECH_DATA
- Shared NUMBER$()
- For LOP=0 To 19
- Read NUMBER$(LOP)
- Next LOP
- SPEECH_DATA:
- Data "0","TEN","TWENTY","THIRTY","FORTY","FIFTY","SIXTY"
- Data "seventy","ay te","nine te"
- Data "Ten","eleven","Twellvve","thirttene","fourtene","fiftene"
- Data "sixttene","seventene","Ate tene","nine tene"
- End Proc
- 'Console The Player When The Frog Sinks
- Procedure LOSERS_SPEECH
- Amal Freeze
- TEMP=Rnd(2)
- If TEMP=0
- TALK["Oh dear,,,,,,,, (you didnot make it)"]
- Else
- If TEMP=1
- TALK["(shame),,,,,,, better luck next time"]
- Else If TEMP=2
- TALK["Woops,,,,,,,, (I forgot to tell you the frog couldnot swim)"]
- End If
- End If
- End If
- End Proc
- 'Give A Congratulations Message To Player
- Procedure WINNERS_SPEECH
- Shared MOVES
- NUM_SAY[MOVES]
- Amal Freeze
- TALK["You took "+Param$+" moves to reach the other side of the pond"]
- If MOVES=7
- TALK["Thats really Fantastic"]
- Else
- If MOVES>7 and MOVES<11
- TALK["Thats not bad,,,,,, keep trying"]
- Else
- If MOVES>10
- TALK["Did you get lost,,,,,,,,,,,,,---, (well,,,,--, at least you didnot sinkkk)"]
- End If
- End If
- End If
- Amal On
- End Proc
- 'This Procedure Tags Some Spaces And A Full Stop Onto Some Speech
- Procedure TALK[TALK$]
- Say TALK$+Space$(150-Len(TALK$))+"."
- End Proc